package com.zzg.automikos.config;

import javax.transaction.TransactionManager;
import javax.transaction.UserTransaction;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.jta.JtaTransactionManager;

import com.atomikos.icatch.jta.UserTransactionImp;
import com.atomikos.icatch.jta.UserTransactionManager;

//@Configuration  
//@EnableTransactionManagement  
public class MySQLTransactionManagerConfig {
	//@Bean(name = "userTransaction")  
    public UserTransaction userTransaction() throws Throwable {  
        UserTransactionImp userTransactionImp = new UserTransactionImp();  
        userTransactionImp.setTransactionTimeout(10000);  
        return userTransactionImp;  
    }  
  
    //@Bean(name = "atomikosTransactionManager", initMethod = "init", destroyMethod = "close")  
    public TransactionManager atomikosTransactionManager() throws Throwable {  
        UserTransactionManager userTransactionManager = new UserTransactionManager();  
        userTransactionManager.setForceShutdown(false);  
        return userTransactionManager;  
    }  
  
//    @Bean(name = "transactionManager")  
//    @DependsOn({"userTransaction", "atomikosTransactionManager"})  
    public PlatformTransactionManager transactionManager() throws Throwable {  
        return new JtaTransactionManager(userTransaction(), atomikosTransactionManager());  
    }  
}
